package top.bugger168.media.service;

import top.bugger168.base.model.PageParams;
import top.bugger168.base.model.PageResult;
import top.bugger168.base.model.RestResponse;
import top.bugger168.media.model.dto.QueryMediaParamsDto;
import top.bugger168.media.model.dto.UploadFileParamsDto;
import top.bugger168.media.model.dto.UploadFileResultDto;
import top.bugger168.media.model.po.MediaFiles;

import java.io.File;

/**
 * 媒资文件管理业务类
 */
public interface MediaFileService {

 /**
  * 根据媒资id获取媒资信息
  * @param mediaId 媒资id
  */
 MediaFiles getFileById(String mediaId);

 /**
  *  媒资文件查询方法
  * @param pageParams 分页参数
  * @param queryMediaParamsDto 查询条件
  */
 PageResult<MediaFiles> queryMediaFiels(Long companyId, PageParams pageParams, QueryMediaParamsDto queryMediaParamsDto);

 /**
  * 上传文件
  * @param companyId 机构id
  * @param uploadFileParamsDto 上传文件信息
  * @param localFilePath 文件磁盘路径
  * @return 文件信息
  */
 UploadFileResultDto uploadFile(Long companyId, UploadFileParamsDto uploadFileParamsDto, String localFilePath,String objectName);


 /**
  * 保存信息文件信息到数据库
  */
 MediaFiles addMediaFilesToDb(Long companyId, String fileMd5, UploadFileParamsDto uploadFileParamsDto, String bucket, String objectName);

 /**
  *  检查文件是否存在
  * @param fileMd5 文件的md5
  */
 RestResponse<Boolean> checkFile(String fileMd5);

 /**
  *  检查分块是否存在
  * @param fileMd5  文件的md5
  * @param chunkIndex  分块序号
  */
 RestResponse<Boolean> checkChunk(String fileMd5, int chunkIndex);

 /**
  *  上传分块
  * @param fileMd5  文件md5
  * @param chunk  分块序号
  * @param localChunkFilePath  分块文件本地路径
  */
 RestResponse uploadChunk(String fileMd5,int chunk,String localChunkFilePath);

 /**
  *  合并分块
  * @param companyId  机构id
  * @param fileMd5  文件md5
  * @param chunkTotal 分块总和
  * @param uploadFileParamsDto 文件信息
  */
 RestResponse mergechunks(Long companyId, String fileMd5, int chunkTotal, UploadFileParamsDto uploadFileParamsDto);

 /**
  * 从minio中下载文件
  * @param bucket 桶名称
  * @param objectName 文件对象名
  * @return 文件
  */
 File downloadFileFromMinIO(String bucket, String objectName);

 /**
  *  将文件写入minIO
  * @param localFilePath  文件地址
  * @param bucket  桶
  * @param objectName 对象名称
  */
 boolean addMediaFilesToMinIO(String localFilePath,String mimeType,String bucket, String objectName);

}
